package 程序员面试金典;

import java.util.Arrays;
import java.util.HashSet;

/**
 * 面试题 01.08. 零矩阵
 * 编写一种算法，若M × N矩阵中某个元素为0，则将其所在的行与列清零。
 *
 *
 *
 * 示例 1：
 *
 * 输入：
 * [
 *   [1,1,1],
 *   [1,0,1],
 *   [1,1,1]
 * ]
 * 输出：
 * [
 *   [1,0,1],
 *   [0,0,0],
 *   [1,0,1]
 * ]
 * 示例 2：
 *
 * 输入：
 * [
 *   [0,1,2,0],
 *   [3,4,5,2],
 *   [1,3,1,5]
 * ]
 * 输出：
 * [
 *   [0,0,0,0],
 *   [0,4,5,0],
 *   [0,3,1,0]
 * ]
 */
public class T01_08 {

    /**
     * 解题思路 遍历矩阵 用set 记录归0的行和列
     */

    public void setZeroes(int[][] matrix) {

        HashSet<Integer> rowSet = new HashSet<>();
        HashSet<Integer> colSet = new HashSet<>();

        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[i].length; j++) {

                if (matrix[i][j]==0){
                    rowSet.add(i);
                    colSet.add(j);
                }

            }
        }


        for (int i = 0; i < matrix.length; i++) {
            if (rowSet.contains(i)){
                Arrays.fill(matrix[i],0);
                continue;
            }
            for (int j = 0; j < matrix[i].length; j++) {
                if (colSet.contains(j)){
                    matrix[i][j] = 0;
                }

            }
        }

    }


}
